/**
 * @author Stephan Marc Hansen
 */
package com.kea.firsthorse.server;

import java.sql.ResultSet;

import com.kea.firsthorse.shared.Horse;
import com.kea.firsthorse.shared.HorsePolicy;
import com.kea.firsthorse.shared.Terms;
import com.kea.firsthorse.shared.User;

/**
 * Interface til brug for Datah�ndteringsklassen.
 * 
 * @author Stephan Marc Hansen
 * @version 1
 */
public interface DataControllerIface {

	/**
	 * Tager et brugerID og et passwordhash og ser om parret matcher Hashet skal
	 * foreg� p� brugersiden for at g�re MiM angreb sv�rere.
	 * 
	 * @param user_id
	 *            for brugeren
	 * @param password_hash
	 *            det hash der skal fors�ges tjekket i databasen
	 * @return boolsk sandt hvis der er overenstemmelse mellem inddata og data
	 *         gemt i databasen.
	 */
	public abstract boolean validate_user(int user_id, String password_hash);

	/**
	 * Indl�ser en bruger, med tilh�rende policies og disses tilh�rende heste.
	 * 
	 * @param user_id
	 *            brugernummer
	 * @return fuld brugerprofil
	 */
	public abstract User getUserData(int user_id);

	/**
	 * Parser et resultset til en brugertype.
	 * 
	 * @param userResultSet
	 *            resultset der skal transformeres til et userobjekt
	 * @return der er repr�senteret ved et givent resultset
	 */
	public abstract User extractUinfo(ResultSet userResultSet);

	/**
	 * Parser et hesteobjekt ud fra et resultset
	 * 
	 * @param horseResultSet
	 *            resultset der skal transformeres til et hesteobjekt
	 * @return der er repr�senteret ved et givent resultset
	 */
	public abstract Horse extractHinfo(ResultSet horseResultSet);

	/**
	 * Parser et policyobjekt ud fra et resultset
	 * 
	 * @param horsepolicyResultSet
	 *            resultset der skal transformeres til et policyobjekt
	 * @return der er repr�senteret ved et givent resultset
	 */
	public abstract HorsePolicy extractPinfo(ResultSet horsepolicyResultSet);

	/**
	 * Udskriver en oversigt over metadata i det angivne resultset.
	 * 
	 * @param inputSet
	 *            resultset der skal udskrives
	 */
	public abstract void printtabledata(ResultSet inputSet);

	/**
	 * @param termsResultSet
	 */
	Terms extractTinfo(ResultSet termsResultSet);

}
